home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 4 / Meeting Pearls Vol. IV (1996)(GTI - Schatztruhe)[!].iso / Pearls / libs / LibGuide / Library_Search.rexx < prev    next >
OS/2 REXX Batch file  |  1996-09-12  |  7KB  |  274 lines

  1. /*
  2. **---------------------------------------
  3. ** 
  4. ** Library_Search.rexx V1.0 - 12.09.96
  5. **
  6. ** Search Libraries.guide for keywords
  7. **
  8. ** © 1996 Heiko Schröder         e-mail: s93324@fh-telekom-leipzig.de
  9. ** You need LIBS: RexxTricks.library
  10. **
  11. ** Inspirations by Tassos Hadjithmomaoglou
  12. ** AMIL_Search.rexx V0.3  © 1995
  13. **
  14. **----------------------------------------
  15. ** $VER: Library_Search.rexx  V1.0 (05-Sep-96)
  16. **----------------------------------------
  17. **
  18. */
  19.  
  20. /*
  21. ** Path for Viewer
  22. **
  23. ** Enter here the full path of an AmigaGuide Viewer of your choice
  24. ** That's the only thing you should change
  25. */
  26.  
  27. Viewer = 'SYS:Utilities/MultiView'
  28.  
  29. /*
  30. ** Please don't change anything after this line
  31. **----------------------------------------------
  32. */
  33.  
  34. OPTIONS RESULTS
  35.  
  36. SIGNAL ON BREAK_C
  37. SIGNAL ON SYNTAX
  38.  
  39. TRUE=1
  40. FALSE=0
  41.  
  42. R="0A"X
  43. say "Search_In_Libraries.guide V1.0 - © Heiko Schröder - 12.09.96 -"||R
  44. IF ~show('L',"rexxtricks.library") then do
  45.    IF ~addlib('rexxtricks.library',0,-30,0) then do
  46.       say "Sorry, but I need the rexxtricks.library in LIBS: ..."
  47.       say "Copy it from Libs-Drawer in this directory"
  48.       say "to your LIBS: directory."||R
  49.       SAY "Press »Return« to end."
  50.       PARSE PULL Keyword
  51.       exit
  52.       exit
  53.    end
  54. end
  55.  
  56. /*
  57. ** Check for Libraries.guide in current directory 
  58. ** If Libraries.guide is found then open it, else inform the user
  59. */
  60.  
  61. bool1=OPEN(AMIL_file,'Libraries.guide',"R")
  62.  
  63. IF bool1 = FALSE THEN
  64. DO
  65.    SAY '"Libraries.guide" wasn''t found in the current directory.'
  66. END
  67. AMIL_Path = 'LibGuide:Libraries.guide'
  68.  
  69. /*
  70. ** Check for argument, else ask for one
  71. */
  72.  
  73. PARSE ARG Keyword
  74.  
  75. IF Keyword = '' THEN
  76. DO
  77.    SAY 'Please input word to search for: (without wildcards) '
  78.    PARSE PULL Keyword
  79.    IF Keyword = '' THEN
  80.    DO
  81.       SAY 'Search abandoned !!!'
  82.       EXIT 0
  83.    END
  84. END
  85.  
  86. SAY d2c(11)||'Searching for "'Keyword'"...'
  87.  
  88. /*
  89. ** Initialize variables
  90. */
  91.  
  92. Counter = 0
  93. Node_Line = 0
  94. Keyword_Line = 0
  95. Node_Name = ''
  96. AMIL_Line = ''
  97.  
  98. /*
  99. ** Create the Library_Search.guide
  100. */
  101.  
  102. if exists("c:search") then do
  103.    address command "c:search >T:node search @node Libraries.guide"
  104.    address command "c:search >T:word search "d2c(34)||Keyword||d2c(34)" Libraries.guide"
  105. end
  106. else do
  107.    say "Sorry, but i need program »SEARCH« in the C: drawer!"||R
  108.    SAY "Press »Return« to end."
  109.    PARSE PULL Keyword
  110.    exit
  111. end
  112.  
  113. say "Creating the guide... Wait one second..."
  114.  
  115. open("test","T:word")
  116. a=readln("test")
  117. if eof("test") then call Ende
  118. close("test")
  119. ReadFile("T:node","liste")            /*Read the T:node in Stem-Variable*/
  120. ReadFile("T:word","wordl")            /*Read the T:word in Stem-Variable*/
  121.  
  122. if wordl.0="0" then
  123.    say "The "||Keyword||" was not found in Libraries.guide!"
  124. else do
  125.    bool1=OPEN(Search_file,'T:Libraries_Search.guide',W)
  126.  
  127.    WRITELN(Search_file,'@database Library_Search')
  128.    WRITELN(Search_file,'@node "Main" "Library_Search V1.0  - 12.09.96 - by Heiko Schröder"')
  129.    WRITELN(Search_file,'')
  130.    WRITELN(Search_file,' The word "@{fg fill}'Keyword'@{fg text}" was found in the following lines:')
  131.    WRITELN(Search_file,'')
  132.  
  133.    i=1
  134.    z=1
  135.    do while 1
  136.       ist1  = liste.i
  137.       ist   = Value(Compress(DelStr(ist1,7)))         /*Linenumber of @node*/
  138.       n=i+1
  139.       next1 = liste.n
  140.       next  = Value(Compress(DelStr(next1,7)))        /*Linenumber of next @node*/
  141.       zeile1= wordl.z
  142.       zeile = Value(Compress(DelStr(zeile1,7)))       /*Linenumber of Keyword*/
  143.  
  144.       if next=0 then next=zeile+1                     /*found KeyWord after last @node*/
  145.  
  146.       if ist>zeile then do                            /*found KeyWord before @node*/
  147.          z=z+1                                        /*next KeyWord*/
  148.       end
  149.  
  150.       if zeile>next then do                           /*found KeyWord after next @node*/
  151.          i=i+1                                        /*next @node*/
  152.       end
  153.  
  154.       if ist<=zeile & zeile<=next then do             /*KeyWord between two @node s*/
  155.          AMIL_Line = ist1                             /*read @node*/
  156.          s1 = DELSTR(DELSTR(AMIL_Line,1,7),1,7)
  157.          Node_Name = DELSTR(s1,INDEX((s1),'"'))
  158.          Node_Line = ist
  159.  
  160.          Search_Line = Delstr(zeile1,1,7)             /*read KeyWord*/
  161.          IF (LEFT(Search_Line,1) ~= '@') | (LEFT(Search_Line,2) = '@{') THEN
  162.          DO
  163.             Counter=Counter+1
  164.             Keyword_Line = zeile - Node_Line
  165.             wo=Index(Upper(Search_Line),Upper(KeyWord))
  166.             l=Length(Keyword)
  167.             vor=DelStr(Search_Line,wo)
  168.             nach=DelStr(Search_Line,1,wo+l-1)
  169.             AMIL_Search_Line = '@{"*" link "LibGuide:Libraries.guide/'Node_Name'" 'Keyword_Line'} 'vor||'@{fg shine}'||KeyWord||'@{fg text}'||nach
  170.             WRITELN(Search_File,AMIL_Search_Line||R||COPIES('-',77))
  171.          END
  172.          z=z+1                                /*next KeyWord*/
  173.          if z>wordl.0 then leave              /*end, if no more KeyWord was found*/
  174.       end
  175.    end
  176. end
  177.  
  178. WRITELN(Search_file,"I have found "||Counter||" possibilities.")
  179.  
  180. WRITELN(Search_file,"@endnode")
  181.  
  182.  
  183. /*
  184. ** Close both files
  185. */
  186. bool1=CLOSE(AMIL_file)
  187. bool1=CLOSE(Search_file)
  188.  
  189. /*
  190. ** Check for Viewer or MultiView/AmigaGuide
  191. */
  192.  
  193. bool1 = EXISTS(Viewer)
  194. IF bool1 = FALSE THEN
  195. DO
  196.    SAY Viewer 'wasn''t found.'
  197.    SAY 'Trying MultiView/AmigaGuide...'
  198.    bool1 = EXISTS('SYS:Utilities/MultiView')
  199.    IF bool1 = FALSE THEN
  200.    DO
  201.       bool1 = EXISTS('SYS:Utilities/AmigaGuide')
  202.       IF bool1 = FALSE THEN
  203.       DO
  204.          SAY 'MultiView/AmigaGuide weren''t found in SYS:Utilities !!!'
  205.          EXIT
  206.       END
  207.       ELSE
  208.       DO
  209.          Viewer = 'SYS:Utilities/AmigaGuide'
  210.       END
  211.    END
  212.    ELSE
  213.    DO
  214.       Viewer = 'SYS:Utilities/MultiView'
  215.    END
  216. END
  217.  
  218. /*
  219. ** View the results from the search
  220. */
  221.  
  222. SAY 'Running 'Viewer'...'||R
  223. ADDRESS COMMAND 'Run >NIL: <NIL:' Viewer 'T:Libraries_Search.guide'
  224. SAY "Press »Return« to end."
  225. PARSE PULL Keyword
  226. ADDRESS COMMAND 'Delete T:Libraries_Search.guide QUIET'
  227. ADDRESS COMMAND 'Delete T:node QUIET'
  228. ADDRESS COMMAND 'Delete T:word QUIET'
  229.  
  230. EXIT 0
  231.  
  232. /*
  233. ** End of ARexx script
  234. */
  235. Ende:
  236.    say "Sorry, but »"||KeyWord||"« was not found."||R
  237.    close("test")
  238.     ADDRESS COMMAND 'Delete T:node QUIET'
  239.     ADDRESS COMMAND 'Delete T:word QUIET'
  240.    SAY "Press »Return« to end."
  241.    PARSE PULL Keyword
  242.    exit
  243.  
  244. /*
  245. ** Handle the Error condition
  246. */
  247.  
  248. SYNTAX:
  249.     bool1=CLOSE(AMIL_file)
  250.     bool1=CLOSE(Search_file)
  251.     ADDRESS COMMAND 'Delete T:Libraries_Search.guide QUIET'
  252.     ADDRESS COMMAND 'Delete T:node QUIET'
  253.     ADDRESS COMMAND 'Delete T:word QUIET'
  254.     SAY R||'Error at line' SIGL ':' ERRORTEXT(RC)
  255.     SAY 'Please report it to the author'||R
  256.    SAY "Press »Return« to end."
  257.    PARSE PULL Keyword
  258.     EXIT
  259.  
  260. /*
  261. ** Handle the Control C command given by the user
  262. */
  263.  
  264. BREAK_C:
  265.     bool1=CLOSE(AMIL_file)
  266.     bool1=CLOSE(Search_file)
  267.     ADDRESS COMMAND 'Delete T:Libraries_Search.guide QUIET'
  268.     ADDRESS COMMAND 'Delete T:node QUIET'
  269.     ADDRESS COMMAND 'Delete T:word QUIET'
  270.     SAY 'Search aborted...'||R
  271.    SAY "Press »Return« to end."
  272.    PARSE PULL Keyword
  273.     EXIT
  274.